package com.gzz.orchid.common.core.util;

import org.springframework.context.support.ResourceBundleMessageSource;

import java.util.Optional;

import static org.springframework.context.i18n.LocaleContextHolder.getLocale;

/**
 * 国际化工具类
 *
 * @author higmd
 * <p>附：HTTP请求头Accept-Language含义</p>
 * <p>Accept-Language:zh-CN,zh;q=0.9 </p>
 * <p>
 * Accept-Language：浏览器支持的语言类型
 * zh-CN：简体中文
 * zh：中国地区
 * q：用户对该范围指定的语言的偏好，为空则默认为1，范围[0, 1]，值越大，权重越大
 */
public class I18nUtil {
    private static final ResourceBundleMessageSource MESSAGE_SOURCE;

    static {
        //System.out.println("I18nUtil init... 初始化");
        MESSAGE_SOURCE = new ResourceBundleMessageSource();
        MESSAGE_SOURCE.setBasename("i18n/messages");
        MESSAGE_SOURCE.setDefaultEncoding("UTF-8");
    }

    /**
     * 根据消息代码获取对应的本地化消息内容
     */
    public static String message(String pattern) {
        return MESSAGE_SOURCE.getMessage(Optional.ofNullable(pattern).map(String::trim).orElse(""), null, getLocale());
    }


    /**
     * 根据消息代码和参数获取本地化消息
     * 消息参数，用于替换消息模板中的占位符
     */
    public static String message(String pattern, Object... args) {
        return MESSAGE_SOURCE.getMessage(Optional.ofNullable(pattern).map(String::trim).orElse(""), args, getLocale());
    }


    /**
     * 根据消息代码获取国际化消息内容
     * 当找不到对应消息代码时返回的默认消息
     */
    public static String message(String pattern, String defaultMessage) {
        return MESSAGE_SOURCE.getMessage(Optional.ofNullable(pattern).map(String::trim).orElse(""), null, defaultMessage, getLocale());
    }

    public static String ofMessage(String pattern) {
        pattern = Optional.ofNullable(pattern).map(String::trim).orElse("");
        return MESSAGE_SOURCE.getMessage(pattern, null, pattern, getLocale());
    }

    public static String ofMessage(String pattern, Object... args) {
        pattern = Optional.ofNullable(pattern).map(String::trim).orElse("");
        pattern = MESSAGE_SOURCE.getMessage(pattern, args, pattern, getLocale());
        return String.format(pattern, args);
    }

}
